**
** A public Mat implementation with extra methods for controlling the Mat and the selection.
** For each dimension, this holds a Mat of selected indexes.
**
** This method is designed to be mutable to minimize the amount of objects needing created.
**
** TODO Validate unchanging shape to keep the immutable shape rule?
**
class SliceMat: ViewMat {

	override Obj? get(Obj coords) {
		1
	}

	// TODO If we hand this class correctly, then things like getf and such should work automatically.

	new make(Mat obj, Obj sels) {
		// TODO
		this.sels = sels
	}

	**
	** Changes the selection for the given dimension.
	**
	Void selectByDim(Int dim, Obj sel) {
	}

	**
	** Might be Mats, Lists, Ints, Ranges, or Steps?
	**
	private Obj[] sels

	override Int[] shape() {
		// TODO Store a separate shape or always calculate each time?
		[1]
	}

	override Void validateObj(Mat proposed) {
		// TODO The selection still needs to be valid.
	}

}
